# 文件名: comprehensions_examples.py
# 说明: Python 推导式示例合集

print("\n--- 示例1: 基础列表推导式 ---")
# 生成平方数列表（传统写法 vs 推导式）
squares = []
for x in range(5):
    squares.append(x**2)
print("传统循环:", squares)  # [0, 1, 4, 9, 16]

# 列表推导式等价写法
squares_comp = [x**2 for x in range(5)]
print("推导式:", squares_comp)  # 输出相同，代码更简洁


print("\n--- 示例2: 带条件的列表推导式 ---")
# 筛选偶数并计算平方
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print("偶数的平方:", even_squares)  # [0, 4, 16, 36, 64]

# 复杂条件示例（同时处理奇偶）
numbers = [-3, 5, 2, -8, 7]
processed = [x*2 if x > 0 else abs(x) for x in numbers]
print("条件处理:", processed)  # [3, 10, 4, 8, 14]


print("\n--- 示例3: 嵌套循环推导式 ---")
# 生成笛卡尔积组合（颜色 × 尺寸）
colors = ["红", "蓝"]
sizes = ["S", "L"]
products = [(color, size) for color in colors for size in sizes]
print("商品组合:", products)  # [('红','S'), ('红','L'), ('蓝','S'), ('蓝','L')]
print("products type:", type(products))


print("\n--- 示例4: 字典推导式 ---")
# 将列表转为键值对字典
fruits = ["苹果", "香蕉", "橙子"]
fruit_dict = {index+1: fruit for index, fruit in enumerate(fruits)}
print("字典推导式:", fruit_dict)  # {1: '苹果', 2: '香蕉', 3: '橙子'}

# 键值交换（值需可哈希）
original = {"a": 1, "b": 2}
swapped = {value: key for key, value in original.items()}
print("键值交换:", swapped)  # {1: 'a', 2: 'b'}


print("\n--- 示例5: 集合推导式 ---")
# 去重并计算平方
numbers = [-3, 2, -3, 5, 2]
unique_squares = {x**2 for x in numbers}
print("唯一平方数:", unique_squares)  # {9, 4, 25}


print("\n--- 示例6: 生成器表达式 ---")
# 生成器逐个产生值，节省内存
gen = (x**3 for x in range(5))
print("生成器输出:", list(gen))  # [0, 1, 8, 27, 64]（转为列表显示）

# 适用于大数据场景（逐项处理）
sum_of_squares = sum(x**2 for x in range(1000000))  # 不创建完整列表
print("百万级平方和:", sum_of_squares)  # 333332833333500000


print("\n--- 示例7: 多维数据结构 ---")
# 创建嵌套列表（矩阵）
matrix = [[i*j for j in range(1, 4)] for i in range(1, 4)]
print("3x3矩阵:")
for row in matrix:
    print(row)  # [1,2,3], [2,4,6], [3,6,9]


print("\n--- 示例8: 文件处理应用 ---")
# 快速过滤文本行（示例文件需自行准备）
lines = ["hello\n", "  \n", "# comment\n", "python\n"]
# line.strip() 是字符串方法，用于移除字符串首尾的空白字符（包括空格、换行 \n、制表符 \t 等）并返回处理后的新字符串。此操作常用于清洗文本数据
clean_lines = [line.strip() for line in lines if line.strip() and not line.startswith('#')]
print("清洗后文本:", clean_lines)  # ['hello', 'python']

print("\n--- 示例9: 函数式编程应用 ---")
# 函数式编程示例
def square(x):
    return x**2
squares = [square(x) for x in range(5)]
print("函数式计算:", squares) # [0, 1, 4, 9, 16]

print("\n--- 关键点总结 ---")
print("1. 列表推导式: [expression for item in iterable]")
print("2. 字典推导式: {key: value for ...}")
print("3. 集合推导式: {expression for ...}")
print("4. 生成器表达式: (expression for ...)")
print("5. 优点: 代码简洁、执行高效（比普通循环快）")
print("6. 注意: 避免过度嵌套，复杂逻辑建议改用循环")